#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>       //getpid的头文件

int gval =100;


int main()
{
//测试修改路径
//	chdir("/home/ubuntu");   //这个是先把对应的路径改了
//	fopen("hello txt","a");   //打开对应的文件，没有就会在当前路径下创建



//测试获取PID
//	while(1)
//	{
//	   printf("我是一个进程！我的PID是：%d,我的PPID是：%d\n",getpid(),getppid());   //getpid实际是有返回值的   但是不是系统自带的类型（本质是整型）
//	   sleep(1);
//	}
//	return 0;



//测试fork
//	printf("父进程开始运行，PID是：%d\n",getpid());
//	fork();
//	printf("进程开始运行，PID是：%d\n",getpid());



//测试fork返回
//	printf("父进程开始运行，PID:%d\n",getpid());
//	pid_t id = fork();
//	if(id<0)
//	{
//	  perror("fork");
//	  return 1; 
//	}
//
////子代码块
//	else if(id ==0)
//	{
//	  //child
//	  while(1)
//	  {
//	   sleep(1);
//	   printf("我是一个子进程！我的PID是：%d，我的父进程id是：%d\n",getpid(),getppid());
//	  }
//	}
//
////父代码块
//	else
//	{
//	  //father
//	  while(1)
//	  {
//	   sleep(1);
//	   printf("我是一个父进程！我的PID是：%d，我的父进程id是：%d\n",getpid(),getppid());
//	  }
//	}




//测试进程修改，写时拷贝
	printf("父进程开始运行，PID:%d\n",getpid());
	pid_t id = fork();
	if(id<0)
	{
	  perror("fork");
	  return 1; 
	}

//子代码块
	else if(id ==0)
	{
	   printf("我是一个子进程！我的PID是：%d，我的父进程id是：%d,gval的值是：%d\n",getpid(),getppid(),gval);
	   sleep(5);
	  
	  //child
	  while(1)
	  {
	   sleep(1);
	   printf("子进程修改变量：%d->%d",gval,gval+=10);
	   gval += 10;  //修改   每一次循环都要做一次修改
	   printf("我是一个子进程！我的pid：%d，我的父进程PPID：%d\n",getpid(),getppid());
	  }
	}

//父代码块
	else
	{
	  //father
	  while(1)
	  {
	   sleep(1);
	   //父进程的操作变为一直查对应的gval
	   printf("我是一个父进程！我的PID是：%d，我的父进程id是：%d,gavl:%d\n",getpid(),getppid(),gval);
	  }
	}










}

